package cn.sfrog.project.biz.admin.service;

import cn.sfrog.project.biz.admin.domain.BizLiveRoom;
import cn.sfrog.project.biz.admin.domain.vo.BizLiveRoomFormVO;
import cn.sfrog.project.biz.admin.domain.vo.BizLiveRoomQueryVO;
import cn.sfrog.project.biz.admin.domain.vo.BizLiveRoomVO;
import cn.sfrog.project.biz.web.vo.room.*;
import cn.sfrog.system.domain.vo.BizStatusChangeVO;
import cn.sfrog.system.domain.vo.app.AppLiveRoomQueryVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 直播房间Service接口
 * 
 * @author dev
 * @date 2024-05-23
 */
public interface IBizLiveRoomService extends IService<BizLiveRoom> {
    /**
     * 查询直播房间
     * 
     * @param id 直播房间主键
     * @return 直播房间
     */
    public BizLiveRoomVO selectBizLiveRoomById(Long id);

    /**
     * 查询直播房间列表
     * 
     * @param query 直播房间
     * @return 直播房间集合
     */
    public List<BizLiveRoomVO> selectBizLiveRoomList(BizLiveRoomQueryVO query);

    public List<AppLiveRoomResultVO> selectBizLiveRoomList4App(AppLiveRoomQueryVO query);

    /**
     * 新增直播房间
     * 
     * @param form 直播房间
     * @return 结果
     */
    public boolean insertBizLiveRoom(BizLiveRoomFormVO form);

    /**
     * 修改直播房间
     * 
     * @param form 直播房间
     * @return 结果
     */
    public boolean updateBizLiveRoom(BizLiveRoomFormVO form);

    /**
     * 批量删除直播房间
     * 
     * @param ids 需要删除的直播房间主键集合
     * @return 结果
     */
    public boolean deleteBizLiveRoomByIds(Long[] ids);

    /**
     * 更改状态
     *
     * @param vo 更改状态表单
     * @return 结果
     */
    boolean changeStatus(BizStatusChangeVO vo);

    /**
     * 创建直播房间
     * @param formVO
     * @return
     */
    AppLiveRoomResultVO startLive(AppLiveRoomFormVO formVO);

    /**
     * 获取房间信息
     * @param roomId
     * @return
     */
    AppLiveRoomResultVO selectBizLiveRoomInfo(Long roomId);

    /**
     * 关播
     * @return
     */
    Boolean stopLiveRoom();

    /**
     * 预约直播
     * @param appLiveRoomAppointmentVo
     * @return
     */
    Boolean appointment(AppLiveRoomAppointmentVo appLiveRoomAppointmentVo);

    /**
     * 定时发现有预约的直播间进行推送消息
     */
    void sendLivePlayNotifyMessage();

    /**
     * 获取当前用户的TRTC推拉流地址
     * @return
     */
//    TrtcStreamResultVO getTrtcStream();

    Integer inoutLiveRoom(AppLiveRoomJoinFormVO vo);

    /**
     * 申请连麦
     *
     * @return
     */
    List<TrtcStreamResultVO> applyWheat(AppLiveRoomApplyWheatFormVO applyWheatVO);

    /**
     * 开始连麦
     * @param vo
     * @return
     */
    List<String> startWheat(AppLiveRoomStartWheatFormVO vo);

    AppLiveRoomResultVO getMyLiveRoomInfo();
}
